package org.jaaksi.test.jasonpaser.bean;

import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;

/**
 * Created by Fcy on 2015/9/27.
 */
public class Person implements Serializable {


    /**
     * "name": "张三",
     * "id": "21",s
     * "age": 21, // 可以用int,Integer ,long,String, double解析
     * "num": "12.3", // 可以String, double, 不能用int
     * "page": 12.3 // 可以用double String, 不能用int
     * "type": 10
     * "date": { // key-value形式，使用map
     * "2011-10-11": "陪你吃饭",
     * "2011-11-12": "带你逛街",
     * "2011-11-13": "陪你看电影"
     * }
     */

    public String name;
    /**
     * 如果age=21，整数，使用Gson解析时为21.0,使用fastjson时为21
     * 如果double,都一样
     */
    public double age;
    public double num;
//    public String page;

    /**
     * 如果服务器吐的是double,那么我们定义为int,Gson将解析失败，fastjson可以，且自动强转为int
     * 但如果服务器吐的是String（如"1.2"）,两个都解析失败
     */
    public int page;
    /**
     * 声明为Integer好处，即可满足int的使用（直接当int使用），在push时，如果是int则会有默认值
     * 如果服务器想不需要提交该字段，则声明为Integer，不赋值是就是null，封装push时不会提交
     *  "type": "" 如果服务器吐的是这样的，我们定义的Integer或int,那么Gson解析将会失败，FastJson是可以的。
     */
    public Integer type;
    public HashMap<String, String> loving;
    // 声明为List或者Array都可以
//    public ArrayList<String> hobby;
    public String[] hobby;

    // 字段类型如果不一致则会解析失败（int, String, double部分例外，见上述）
//    public String hobby;

    /**
     * 多余字段不影响解析
     */
    public int aaa;

    /**
     * Gson可以解析private字段，而FastJson不解析
     */
    private String pri;

//    public Date date;

    public Inner inner;


    /**
     * 可以写成内部类，也可以放到外面
     */
    public class Inner implements Serializable {
        /**
         * id最好用String
         */
        public String id;

        /**
         * 少字段不影响解析
         */
//        public String grade;
        @Override
        public String toString() {
            return "Inner{" +
                "id='" + id + '\'' +
                '}';
        }
    }


    @Override
    public String toString() {
        return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            ", num=" + num +
            ", page='" + page + '\'' +
            ", type=" + type +
            ", loving=" + loving +
            ", hobby=" + Arrays.toString(hobby) +
            ", aaa=" + aaa +
            ", pri='" + pri + '\'' +
            ", inner=" + inner +
            '}';
    }
}
